home *** CD-ROM | disk | FTP | other *** search
/ Belgian Amiga Club - ADF Collection / BS1 part 34.zip / BS1 part 34 / FredFish PD 314.adf / Zc / zcsrc.lzh / IOLib / stdio / fflush.c < prev    next >
C/C++ Source or Header  |  1989-05-18  |  1KB  |  60 lines

  1. #include <stdio.h>
  2.  
  3. extern    FILE    _iob[];
  4.  
  5. int fflush(fp)
  6.     register FILE *fp;
  7. /*
  8.  *    implementation note:  This function has the side effect of
  9.  *    re-aligning the virtual file pointer (in the buffer) with
  10.  *    the actual file pointer (in the file) and is therefore used
  11.  *    in other functions to accomplish this re-sync operation.
  12.  */
  13.     {
  14.     register int f, i;
  15.  
  16.      if(fp)
  17.         return(_fflush(fp));
  18.     else
  19.         {
  20.         for(i=0; i<_NFILE; ++i)
  21.             {
  22.             f = _iob[i]._flag;
  23.             if(f & (_IOREAD | _IOWRT))
  24.                 _fflush(&_iob[i]);
  25.             }
  26.         return(0);
  27.         }
  28.     }
  29.  
  30. static int _fflush(fp)
  31.     register FILE *fp;
  32.     {
  33.     register int f, rv = 0, c;
  34.     register long offset;
  35.  
  36.      if(fp == NULL)
  37.         return(0);
  38.     f = fp->_flag;
  39.     if ((!(f & (_IOREAD | _IOWRT))))        /* file not open! */
  40.         return(0);
  41.     if(fp->_cnt){                /* data in the buffer */
  42.         if(f & _IORW)                /* writing */
  43.             {
  44.             if(write(fp->_file, fp->_base, fp->_cnt) != fp->_cnt)
  45.                 {
  46.                 fp->_flag |= _IOERR;
  47.                 rv = EOF;
  48.                 }
  49.             }
  50.         else if ( !f & _IODEV ){ /* reading */
  51.             offset = -(fp->_cnt);
  52.             if (lseek(fp->_file, offset, 1) < 0)
  53.                 rv = EOF;
  54.         }
  55.     }
  56.     fp->_ptr = fp->_base;
  57.     fp->_cnt = 0;
  58.     return(rv);
  59.     }
  60.